/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.edu.uniminuto.arqSw.videoMinuto.servlets;


import co.uniminuto.edu.videominuto.entities.Categoria;
import co.uniminuto.edu.videominuto.entities.Clasificacion;
import co.uniminuto.edu.videominuto.entities.Formato;
import co.uniminuto.edu.videominuto.entities.Idioma;
import co.uniminuto.edu.videominuto.entities.Video;
import co.uniminuto.edu.videominuto.sessionBeans.CategoriaFacade;
import co.uniminuto.edu.videominuto.sessionBeans.CategoriaFacadeLocal;
import co.uniminuto.edu.videominuto.sessionBeans.ClasificacionFacade;
import co.uniminuto.edu.videominuto.sessionBeans.ClasificacionFacadeLocal;
import co.uniminuto.edu.videominuto.sessionBeans.FormatoFacade;
import co.uniminuto.edu.videominuto.sessionBeans.FormatoFacadeLocal;
import co.uniminuto.edu.videominuto.sessionBeans.IdiomaFacade;
import co.uniminuto.edu.videominuto.sessionBeans.IdiomaFacadeLocal;
import co.uniminuto.edu.videominuto.sessionBeans.TipoCalificacionFacade;
import co.uniminuto.edu.videominuto.sessionBeans.TipoCalificacionFacadeLocal;
import co.uniminuto.edu.videominuto.sessionBeans.TipoPersonaFacade;
import co.uniminuto.edu.videominuto.sessionBeans.TipoPersonaFacadeLocal;
import co.uniminuto.edu.videominuto.sessionBeans.VideoFacade;
import co.uniminuto.edu.videominuto.sessionBeans.VideoFacadeLocal;
import co.uniminuto.edu.videominuto.util.ParametrosGlobales;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author ingeniero_1
 */
public class InsertarVideoServlet extends HttpServlet {

    
    @EJB
    VideoFacadeLocal vf;
    @EJB
    CategoriaFacadeLocal cf;
    @EJB
    FormatoFacadeLocal ff;
    @EJB
    TipoPersonaFacadeLocal tpf;
    @EJB
    ClasificacionFacadeLocal clf;
    @EJB
    IdiomaFacadeLocal idf;
    @EJB
    TipoCalificacionFacadeLocal tcf;
    
    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        
        List<Categoria>categorias = cf.findAll();
        List<Formato>formatos = ff.findAll();
        List<Idioma>idiomas = idf.findAll();
        List<Clasificacion>clasificaciones = clf.findAll();
        
        Logger logger = Logger.getLogger("Insertar .. ");
        
        //Obtener los datos para la insercion
        String titulo = request.getParameter(ParametrosGlobales.FILTRO_TITULO_VIDEO);
        String categoria = request.getParameter(ParametrosGlobales.FILTRO_CATEGORIA);
        String formato = request.getParameter(ParametrosGlobales.FILTRO_FORMATO);
        String idioma = request.getParameter(ParametrosGlobales.FILTRO_IDIOMA);
        String clasificacion = request.getParameter(ParametrosGlobales.FILTRO_CLASIFICACION);
        String duracion = request.getParameter(ParametrosGlobales.FILTRO_DURACION);
        String fecha = request.getParameter(ParametrosGlobales.FILTRO_FECHA_PRODUCCION);
        String mensaje = "Se inserto el video : ";

        if(categoria != null && formato != null && idioma != null && clasificacion != null
            && titulo != null && duracion != null){
                       
            boolean correcto;
            Date fechaVideo = null;
            Integer idCategoria = 0, idFormato = 0, idIdioma = 0, idClasificacion = 0, intDuracion = 0;
            
            try {
                //Convertir al enteros
                idCategoria = Integer.parseInt(categoria);
                idFormato = Integer.parseInt(formato);
                idIdioma = Integer.parseInt(idioma);
                idClasificacion = Integer.parseInt(clasificacion);
                intDuracion = Integer.parseInt(duracion);
                
                //Extraer los datos de fecha
                String[] datosFecha = fecha.split("-");
                int anio = Integer.parseInt(datosFecha[0]);
                int mes = Integer.parseInt(datosFecha[1]);
                int dia = Integer.parseInt(datosFecha[2]);
                
                //Generar la fecha
                Calendar c = Calendar.getInstance();
                c.set(anio, mes - 1, dia);
                fechaVideo = new Date(c.getTimeInMillis());
                
                correcto = true;
            } catch (Exception e) {
                mensaje = "Datos incorrectos";
                correcto = false;
            }
            
            //Si no hay problemas con los ids
            if(correcto){
                               
                //Nuevo video
                Video video = new Video();
                
                //Asignar titulo
                video.setTitulo(titulo);
                
                //Asignar duracion
                video.setDuraVideo(intDuracion);
                
                //Asignar el ISAN
                video.setIsan("" + System.currentTimeMillis());
                
                //Asignar la fecha
                video.setFechaProduccion(fechaVideo);
                                
                //Asiganar formato
                for(Formato f : formatos){
                    if(f.getIdFormato().equals(idFormato)){
                        video.setIdFormato(f);
                        break;
                    }
                }
                
                //Asignar clasificacion
                for(Clasificacion c : clasificaciones){
                    if(c.getIdClasificacion().equals(idClasificacion)){
                        
                        video.setIdClasificacion(c);
                        break;
                    }
                }
                
                //Asiganar categoria
                for(Categoria c : categorias){
                    if(c.getIdCategoria().equals(idCategoria)){
                        List<Categoria> hc = new ArrayList<Categoria>();
                        hc.add(c);
                        video.setCategoriaList(hc);
                        
                        break;
                    }
                }
                
                //Asignar idioma original
                for(Idioma i : idiomas){
                    if(i.getIdIdioma().equals(idIdioma)){
                        video.setIdIdioma(i);
                        break;
                    }
                }
                
                vf.create(video);
                
                mensaje += video.getTitulo();
            }
            
        }else{
            mensaje = "Datos incompletos";
        }
               
        //Asignar atributo 
        request.setAttribute("categorias", categorias);
        request.setAttribute("formatos", formatos);
        request.setAttribute("idiomas", idiomas);
        request.setAttribute("clasificaciones", clasificaciones); 
        request.setAttribute("mensaje", mensaje);
        
        request.getRequestDispatcher("/paginas/video/insertarVideo.jsp").forward(request, response);
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
